"""
    匿名函数就是不在使用def语句(函数的标准声明格式)声明的函数
    def 函数名(参数列表):
        函数体
    匿名函数的技术原型来自于C++.C++中有lambda表达式.Python引用Lambda表达式.

    lambda是表达式而不是代码块.仅能够在lambda中封装有限的逻辑.lambda有自己的命名空间
    这里的命名空间可以理解为是作用域.它不能访问自有参数列表之外的变量或者全局命名空间的
    参数.

    lambda的语句格式:
        [arg1[,arg2,arg3]] 这叫做可选参数.可以有也可以没有
        lambda [arg1[,arg2,arg2]] : expression
        :后面的expression等同于标准声明函数写在return后面的内容.

    使用lambda表达式要注意的细节问题:
        1.代码块属于一次性使用.可以将代码块变成lambda表达式.节省内存空间
        2.代码简洁
        3.一般有一行表达式,必须有返回值
        4.不能写return
        5.可以没有参数也可以有一个或者多个参数
    >>> t = lambda :True
    >>> t
    <function <lambda> at 0x00000000026A6168>
    >>> t()
    True
    >>>

    扩展:python中的偏函数partial 这是python function模块的内容叫做偏函数
    练习:使用函数封装排序算法:冒泡
    作业:快速排序法.
"""

def fun_get_sum(x, y):
    return x + y


# 把上面的函数切换成lambda:
lambda x, y: x + y

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 需求:要求找出列表中所有大于3的元素
def get_range(l,m):
    l2 = []
    for i in l:
        if i > m:
            l2.append(i)
    return l2



# 函数式编程
def get_range2(x):
    return x > 3

# python中经常看到序列: 字符串 列表 元组  都可以切片 都有下标
target = filter(get_range2,[1,2,3,4,5,6,7,8,9,10])
print([i for i in target])

# 使用lambda来体验函数式编程
print([i for i in filter(lambda x:x>3,[1,2,3,4,5,6,7,8,9,10])])